/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function (nums, k) {
    let numsMap = new Map(),
        res = [],
        ans = [];

    // 先统计出现次数
    for (let i = 0; i < nums.length; i++) {
        numsMap.set(nums[i], (numsMap.get(nums[i]) || 0) + 1)
    }

    for (const [key, value] of numsMap) {
        // 如果res的数量小于k，push进去，排序
        if (res.length < k) {
            res.push([key, value])
            res.sort((a, b) => a[1] - b[1])
            continue
        }

        // 大于等于k时，把最小的shift
        if (res[0][1] < value) {
            res.shift()
            res.push([key, value])
            res.sort((a, b) => a[1] - b[1])
        }
    }

    for (let i = 0; i < res.length; i++) {
        ans.push(res[i][0])
    }

    return ans
};

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function (nums, k) {
    const map = new Map();
    nums.forEach(n => {
        map.set(n, map.has(n) ? map.get(n) + 1 : 1);
    });
    const list = [...map].sort((a, b) => b[1] - a[1]);
    return list.slice(0, k).map(n => n[0]);
};

console.log(topKFrequent([1], 1))